package com.dragon.modules.yuegou.service.system;

import com.baomidou.mybatisplus.extension.service.IService;
import com.dragon.modules.yuegou.entity.system.DocumentEntity;
import com.dragon.modules.yuegou.model.system.Document;

import javax.annotation.Nullable;
import java.io.File;
import java.io.InputStream;
import java.util.List;

/**
 * 文档 服务接口
 *
 * @author pbuilder generated
 * @date 2019-05-14 15:42:12
 * @version 2.0
 */
public interface DocumentService extends IService<DocumentEntity> {

	/**
	 * 上传文档
	 * 
	 * @param name   文件名（原文件名）
	 * @param format 文件格式
	 * @param file   文件
	 * @return 文档信息
	 */
	Document upload(@Nullable String name, String format, File file);

	/**
	 * 上传文档
	 * 
	 * @param name   文件名（原文件名）
	 * @param format 文件格式
	 * @param input   文件输入流
	 * @return 文档信息
	 */
	Document upload(@Nullable String name, String format, InputStream input);

	/**
	 * 上传临时文档<br>
	 * 有效时间位24小时，有效期过后会自动删除
	 * 
	 * @param name   文件名（原文件名）
	 * @param format 文件格式
	 * @param file   文件
	 * @return 文档信息
	 */
	Document uploadTemp(@Nullable String name, String format, File file);

	/**
	 * 上传文档<br>
	 * 有效时间位24小时，有效期过后会自动删除
	 * 
	 * @param name   文件名（原文件名）
	 * @param format 文件格式
	 * @param input   文件输入流
	 * @return 文档信息
	 */
	Document uploadTemp(@Nullable String name, String format, InputStream input);

	/**
	 * 删除超时的临时文档
	 * 
	 * @return 被删除的临时文档
	 */
	List<Document> deleteExpiredTempDocuments();

	/**
	 * 生成Excel文档<br>
	 * 统一使用xlsx格式
	 * 
	 * @param title      文档标题（不含后缀）
	 * @param excelModel Excel模型对象，请参考liuwu-excel工具
	 * @return Excel文档信息
	 */
	Document generateExcel(String title, Object excelModel);

	/**
	 * 读取Excel内容
	 * 
	 * @param <T>   Excel模型对象类型
	 * @param docId Excel文档ID，要求文档类型必须是Excel
	 * @param type  Excel模型对象类型
	 * @return Excel内容
	 */
	<T> T readExcel(String docId, Class<T> type);

}